import axios from "axios";
import Cookies from "js-cookie";
import { Message } from 'element-ui';

const userRequest = axios.create({
    baseURL: 'http://localhost:8061/user',   // 用户端路径
    timeout: 1000 * 10,
});

// 请求拦截器
userRequest.interceptors.request.use(config => {
    config.headers['Content-Type'] = 'application/json;charset=utf-8';

    // 确保请求时带上 cookie
    config.withCredentials = true;

    // 获取 cookies 中的 admin 数据并解析
    const adminCookie = Cookies.get('adminCookie');
    if (adminCookie) {
        config.headers['adminToken'] = JSON.parse(adminCookie).token;   // 设置请求头
    }

    // 获取 cookies 中的 user 数据并解析
    const userCookie = Cookies.get('userCookie');
    if (userCookie) {
        config.headers['userToken'] = JSON.parse(userCookie).token;   // 设置请求头
    }

    return config;  // 不忘返回 config，避免请求卡住
}, error => {
    return Promise.reject(error);  // 请求错误统一处理
});

// 响应拦截器
userRequest.interceptors.response.use(
    response => {

        const headers = response.headers;

        // 验证码路径直接返回
        if(response.config.url.includes('/account/setCaptcha')) {
            // 检查是否存在 captcha-key 并存储到 cookie
            const captchaKey = headers['captcha-key'];
            if (captchaKey) {
                // 存储 captcha-key 到 cookie 中，设置过期时间为2分钟
                Cookies.set('captcha-key', captchaKey, { expires: 1 / 720 });
            }
            return response
        }

        // 兼容服务端返回的字符串数据
        let res = response.data;
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res;
        }

        // 假设后端的接口返回格式为 { code, message, data }
        if(res.code === 450) {
            Cookies.remove('userCookie');
            Message.error('登陆已过期，请重新登录');
        } else if (res.code !== 200 ) {
            // 根据不同的 code 值进行不同的错误处理
            Message.error(res.msg || "请求失败");
        }

        return res; // 返回处理后的数据
    },

);

export default userRequest;
